<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var arr = [1, [2, 3, [4, 5]], [6, [7, 8]]]

    // 1. reduce结合递归
    // function flatten1(arr) {
    //   return arr.reduce((result, item) => {
    //     // return result.concat(Array.isArray(item) ? flatten1(item) : item); //简写
    //     // 判断每一项是否为为数组
    //     if (Array.isArray(item)) {
    //       // 如果是数组则递归，通过reduce继续遍历
    //       return result.concat(flatten1(item))
    //     }
    //     // 如果不是数组则拼接到空数组中
    //     return result.concat(item)
    //   }, []);
    // }

    function flatten1(arr) {
      return arr.reduce((tot, cur) => {
        return tot.concat(Array.isArray(cur) ? flatten1(cur) : cur)
      }, [])
    }

    console.log(flatten1(arr));

    // 2.遍历+递归
    function flatten4(arr) {
      var res = [];
      arr.map(item => {
        if (Array.isArray(item)) {
          res = res.concat(flatten2(item));
        } else {
          res.push(item);
        }
      });
      return res;
    }

    function flatten2(arr) {
      var newArr = []
      for (let i in arr) {
        if (Array.isArray(arr[i])) {
          newArr = newArr.concat(flatten2(arr[i]))
        } else {
          newArr.push(arr[i])
        }
      }
      return newArr
    }
    console.log(flatten2(arr));

    //  3.while循环+扩展运算符
    // function flatten3(arr) {
    //   while (arr.some(item => Array.isArray(item))) {
    //     arr = [].concat(...arr);
    //   }
    //   return arr;
    // }

    function flatten3(arr) {
      while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr)
      }
      return arr
    }

    console.log(flatten3(arr));

    // 4.toString方法+split
    // function flatten(arr) {
    //   return arr.toString().split(',').map(function (item) {
    //     return Number(item);
    //   })
    // 或：
    // return arr.join(',').split(',').map(function (item) {
    //   return parseInt(item);
    // })
    // }

    function flatten(arr) {
      return arr.toString().split(',').map(item => {
        return Number(item)
      })
    }
    console.log(flatten(arr));
  </script>
</body>

</html>